package com.hrzyit.whistle.cases.data.api

import com.hrzyit.base.data.protocol.ApiPageInfo
import com.hrzyit.base.data.protocol.BaseResp
import com.hrzyit.whistle.cases.data.bean.*
import com.hrzyit.whistle.cases.data.protocol.*
import retrofit2.http.Body
import retrofit2.http.POST
//import rx.Observable
import io.reactivex.Observable
import io.reactivex.Observer

/**
 * 案件管理相关操作 API 接口
 * @author YangWei
 * @date 2019/4/4
 */
interface CaseCenterApi {

    /**
     * 上报案件
     * @author YangWei
     * @date 2019/3/25
     * @param caseApplyReq @{link SysDictReq}
     * @return 成功(true)|失败(false)
     */
    @POST(value = "case/caseApply")
    fun caseApply(@Body caseApplyReq: CaseApplyReq): Observable<BaseResp<MutableMap<String, Any>>>

    /**
     * 获取指定案件类型数据列表
     * @author YangWei
     * @date 2019/4/8
     * @param  selectCaseReq    @{link SelectCaseReq}
     * @return 指定案件类型数据列表
     */
    @POST(value = "case/selectCaseList")
    fun selectCaseListByCaseType(@Body selectCaseReq: SelectCaseReq): Observable<BaseResp<ApiPageInfo<CaseInfoEntity>>>

    /**
     * 获取指定案件详情数据
     * @author YangWei
     * @date 2019/4/8
     * @param caseDetailInfoReq  @{link CaseDetailInfoReq}
     * @return 指定案件详情数据
     */
    @POST(value = "case/getCaseInfoById")
    fun getCaseInfoById(@Body caseDetailInfoReq: CaseDetailInfoReq): Observable<BaseResp<CaseDetailInfoEntity>>

    /**
     * 签收或不签收(受理或不受理)指挥中心派发的案件（指挥中心->单位）
     * @author YangWei
     * @date 2019/4/17
     * @param caseSignInReq @{link CaseSignInReq}
     * @return 成功(true)|失败(false)
     */
    @POST(value = "case/signInCaseFromCenter")
    fun signInCaseFromCenter(@Body caseSignInReq: CaseSignInReq): Observable<BaseResp<Boolean>>

    /**
     * 签收或不签收(受理或不受理)单位批转的案件（单位->单位）
     * @author YangWei
     * @date 2019/4/19
     * @param caseSignInReq @{link CaseSignInReq}
     * @return 成功(true)|失败(false)
     */
    @POST(value = "case/signInCaseFromDept")
    fun signInCaseFromDept(@Body caseSignInReq: CaseSignInReq): Observable<BaseResp<Boolean>>


    /**
     * 保存单位批转案件信息（单位->单位）
     * @author YangWei
     * @date 2019/4/19
     * @param caseTransferSaveReq @{link CaseTransferSaveReq}
     * @return 成功(true)|失败(false)
     */
    @POST(value = "case/saveTransferCaseToDept")
    fun saveTransferCaseToDept(@Body caseTransferSaveReq: CaseTransferSaveReq): Observable<BaseResp<Boolean>>

    /**
     * 获取案件派遣人信息列表
     * @author YangWei
     * @date 2019/4/19
     * @param caseDispatchUserReq( @{link CaseDispatchUserReq}
     * @return 案件派遣人信息列表 @{link CaseIndexUserInfoVo}
     */
    @POST(value = "case/selectCaseDispatchUserList")
    fun selectCaseDispatchUserList(@Body caseDispatchUserReq: CaseDispatchUserReq):
            Observable<BaseResp<MutableList<CaseIndexUserInfoVo>>>

    /**
     * 保存案件派遣人(处置人)信息
     * @author YangWei
     * @date 2019/4/20
     * @param caseDisposeUserReq @{link CaseDisposeUserReq}
     * @return 成功(true)|失败(false)
     */
    @POST(value = "case/saveCaseDisposeUser")
    fun saveCaseDisposeUser(@Body caseDisposeUserReq: CaseDisposeUserReq): Observable<BaseResp<Boolean>>

    /**
     * 获取批转单位信息列表
     * @author YangWei
     * @date 2019/4/19
     * @param caseTransferDeptReq( @{link CaseTransferDeptReq}
     * @return 批转单位信息列表 @{link CaseIndexDeptInfoVo}
     */
    @POST(value = "case/selectCaseTransferDeptList")
    fun selectCaseTransferDeptList(@Body caseTransferDeptReq: CaseTransferDeptReq):
            Observable<BaseResp<MutableList<CaseIndexDeptInfoVo>>>

    /**
     *
     * @author YangWei
     * @date 2019/4/21
     * @return
     */
    @POST(value = "case/saveCaseDisposeResult")
    fun saveCaseDisposeResult(@Body req: SaveDisposeCaseInfoReq): Observable<BaseResp<Boolean>>

    /**
     *
     * @author YangWei
     * @date 2019/4/21
     * @return
     */
    @POST(value = "case/applyCaseClose")
    fun applyCaseClose(@Body reqApply: CaseApplyCloseReq): Observable<BaseResp<Boolean>>

    /**
     * 保存批示信息
     * @author YangWei
     * @date 2019/4/28
     * @param req {@link CaseSaveAuthMsgReq}
     * @return 成功/失败(true/false)
     */
    @POST(value = "case/saveOrUpdateAuthMsg")
    fun saveOrUpdateAuthMsg(@Body req: CaseSaveAuthMsgReq): Observable<BaseResp<Boolean>>

    /**
     * 查看批示信息详情
     * @author YangWei
     * @date 2019/4/28
     * @param req {@link CaseAuthInfoReq}
     * @return authMsgEntityVo {@link AuthMsgEntityVo}
     */
    @POST(value = "case/getCaseAuthInfo")
    fun getCaseAuthInfo(@Body req: CaseAuthInfoReq): Observable<BaseResp<AuthMsgEntityVo>>

    /**
     * 获取批示接收单位/人员列表
     * @author YangWei
     * @date 2019/4/29
     * @param req {@link CaseAuthInfoReq}
     * @return caseApproveUserDeptVo {@link SelectUserDeptInfoVo}
     */
    @POST(value = "case/getDeptUserForApproveList")
    fun getDeptUserForApproveList(@Body req: CaseAuthInfoReq): Observable<BaseResp<MutableList<SelectUserDeptInfoVo>>>


    /**
     * 获取批转单位的人员信息列表
     * @author YangWei
     * @date 2019/5/08
     * @param req {@link CaseTransferDeptReq}
     * @return 批转单位的人员信息列表 @{link CaseIndexUserInfoVo}
     */
    @POST(value = "case/selectCaseTransferUserList")
    fun selectCaseTransferUserList(@Body req: CaseTransferDeptReq): Observable<BaseResp<MutableList<CaseIndexUserInfoVo>>>

    /**
     * 发起吹哨
     * @author YangWei
     * @date 2019/5/9
     * @param req {@link WhistleCaseReq}
     * @return 成功/失败(true/false)
     */
    @POST(value = "case/applyCaseWhistle")
    fun applyCaseWhistle(@Body req: WhistleCaseReq): Observable<BaseResp<Boolean>>

    /**
     * 获取案件进度情况数据
     * @author YangWei
     * @date 2019/5/9
     * @param caseId 案件id
     * @return MutableList<CaseInfoProcessVo> {@link CaseInfoProcessVo}
     */
    @POST(value = "case/getCaseInfoProcessListByCaseId")
    fun getCaseInfoProcessListByCaseId(@Body caseId: Long): Observable<BaseResp<MutableList<CaseInfoProcessVo>>>
}